package cn.feng.thinkInJava.a9_1_类型信息.typeinfo.packageaccess.a14_09_02;

//: typeinfo/ModifyingPrivateFields.java
import java.lang.reflect.*;

class WithPrivateFinalField
{
	private int i=1;
	//final域实际上在遭遇修改时候是安全的.运行时候系统会在不抛出异常的情况下接受任何修改尝试,但是实际上不会发生任何修改
	private final String s="I'm totally safe";
	private String s2="Am I safe?";
	
	public String toString()
	{
		return "i = "+i+", "+s+", "+s2;
	}
}

public class ModifyingPrivateFields
{
	public static void main(String[] args) throws Exception
	{
		WithPrivateFinalField pf=new WithPrivateFinalField();
		System.out.println(pf);
		Field f=pf.getClass().getDeclaredField("i");
		f.setAccessible(true);
		System.out.println("f.getInt(pf): "+f.getInt(pf));
		f.setInt(pf,47);
		System.out.println(pf);
		f=pf.getClass().getDeclaredField("s");
		f.setAccessible(true);
		System.out.println("f.get(pf): "+f.get(pf));
		f.set(pf,"No, you're not!");
		System.out.println(pf);
		f=pf.getClass().getDeclaredField("s2");
		f.setAccessible(true);
		System.out.println("f.get(pf): "+f.get(pf));
		f.set(pf,"No, you're not!");
		System.out.println(pf);
	}
} /* Output:
i = 1, I'm totally safe, Am I safe?
f.getInt(pf): 1
i = 47, I'm totally safe, Am I safe?
f.get(pf): I'm totally safe
i = 47, I'm totally safe, Am I safe?
f.get(pf): Am I safe?
i = 47, I'm totally safe, No, you're not!
*///:~
